import json

from tornado import web, ioloop

# 作为后续的文件的模板来使用
class indexHandler(web.RequestHandler):
    proxy = None
    prepareParams = None
    def initialize(self,proxy,username): # 接受的时候，形参的名称需要和 urlpattern 中传的字典的key值保持一致
        #  在这个钩子函数中，接受路由中传过来的参数，并且这个钩子函数会在 get，post等函数之前触发，常用于做视图类的一些初始化
        self.proxy = proxy
        print('initialize,',proxy)
        print('username,',username)
    # prepare钩子函数，on_finish钩子函数。 prepare函数会在请求正式接受之前执行(也就是在执行get，post，put函数之前)，on_finish则是在请求接受完成之后执行
    # prepare函数的作用：常用于进行一些请求预处理的事情
    def prepare(self):
        # 比如，当客户端传过来的是json类型的数据时。我们就可以在这里进行预处理先接受到请求体中的数据然后 将json字符串解析成对象
        content_type = self.request.headers.get('content-type')
        # 先判断 请求体中传过来的数据是什么类型
        # application/xml：表示请求体中携带的数据类型是xml  (引入第三方库，lxml解析xml内容)
        # application/json：表示请求体中携带的数据类型是json (最常用的还是json类型，使用自带的库，json来解析json内容)
        # text/html：表示请求体中携带的数据类型是html  (和xml一样，也可以用lxml工具来做解析)
        if content_type == 'application/json':
            self.prepareParams = json.loads(self.request.body)
        elif content_type == 'application/xml':
            self.prepareParams = self.request.body # 作为演示，xml或者html的解析这里不写
        else:
            self.prepareParams = self.request.body # 这是 html的或其他的
    def get(self):
        # print('get')
        # 对路由设置别名了之后，你可以通过路由反解析，通过路由别名获取到对应路由的路径，比如：
        # print(self.reverse_url('indexURL')) # 会打印出 别名为indexURL的路由的路径，此处就是 / 即根路径
        self.write('am coming!!!kkkkk????哈哈哈鹅鹅鹅饿额')

    def post(self):
        # 这样 就完成了对请求参数的预处理的接受
        print('prepareParams--',self.prepareParams)
        print('name', self.prepareParams['name'])
# 用于创建 web.application 的第二种写法
class webApplication(web.Application):
    def __init__(self, urlPatterns, *args, **kwargs):
        kwargs['handlers'] = urlPatterns
        super().__init__( *args, **kwargs)
#   为tornado服务器的启动 开启debug模式
settings = {
    'debug':True
}
if __name__ == '__main__':
    # 路由传参的第二种方法，（第一种是在url路径中加入正则表达式，进行传参），第二种是往urlpatterns中传入第三个参数，如下 （传入格式为字典）,还能传入第四个参数指定，路由的名字。
    app = webApplication([(r"/", indexHandler,{'proxy':'192.10.10.1','username':'kangkang'},'indexURL')],**settings)
    app.listen(9000)
    ioloop.IOLoop.current().start()
